/**
 * @file vSwTask.h
 * @brief
 *      返回值为void（无返回值）版本，简单的错误处理能力
 * @author Zyan (zyishere2001@qq.com)
 * @version 1.0
 * @date 2022-12-27
 *
 * @copyright Copyright (c) 2022  Zyanishere2001
 *
 * @par 修改日志:
 */

#pragma once

typedef unsigned short sw_task_t; // 任务类型
typedef unsigned short sw_tim_t;  // 定时器装载值

// basic
#define vSW_INIT(s) s = 0; // 初始化状态
#define vSW_SET(s) s = __LINE__;  case __LINE__: // 设定状态断点入口

// 总入口，封装switch
#define vSW_BEGIN(s) \
        switch (s){  \
        case 0:

// 总出口，封装switch尾
#define vSW_END(s) \
    }              \
    vSW_INIT(s);   \
    return;

// 异步等待事件
#define vSW_WAIT_UNTIL(s, condition) \
    do{                              \
        vSW_SET(s);                  \
        if (!(condition)){           \
            return;                  \
        }                            \
    } while (0)

// 异步延时
#define vSW_DELAY(s, t, l) \
    do{                    \
        t = l;             \
                           \
        vSW_SET(s);        \
        t--;               \
        if (t != 0){       \
            return;        \
        }                  \
    } while (0)



/**
 * 错误处理能力，类似try catch
 */
//错误处理块的case值
#define vSW_ERROR_BLOCK_ENTRY   0xFFFE
//e:错误，类型自定义
#define vSW_THROW(s, err_handle, e)   err_handle = e ; s = vSW_ERROR_BLOCK_ENTRY
#define vSW_ERROR_BLOCK()   case vSW_ERROR_BLOCK_ENTRY: